package api

import (
	"time"
)

// DeviceInfo 表示设备信息
type DeviceInfo struct {
	DeviceID   string                 `json:"device_id"`
	DeviceType string                 `json:"device_type"`
	Status     string                 `json:"status"` // online, offline
	Properties map[string]interface{} `json:"properties"`
	LastSeen   time.Time              `json:"last_seen"`
	CreatedAt  time.Time              `json:"created_at"`
}

// DeviceData 表示设备上报的数据
type DeviceData struct {
	DeviceID   string                 `json:"device_id"`
	Data       map[string]interface{} `json:"data"`
	Timestamp  time.Time              `json:"timestamp"`
}

// DevicePropertyConfig 表示设备属性控制配置
type DevicePropertyConfig struct {
	ID          string                 `json:"id"`
	DeviceID    string                 `json:"device_id"`
	Property    string                 `json:"property"`
	Config      map[string]interface{} `json:"config"` // 控制配置，如阈值、警报设置等
	CreatedAt   time.Time              `json:"created_at"`
	UpdatedAt   time.Time              `json:"updated_at"`
}

// User 表示系统用户
type User struct {
	ID          string    `json:"id"`
	Username    string    `json:"username"`
	Password    string    `json:"password,omitempty"` // 在返回用户信息时不包含密码
	Email       string    `json:"email"`
	Role        string    `json:"role"`
	Status      string    `json:"status"` // active, inactive, locked
	CreatedAt   time.Time `json:"created_at"`
	UpdatedAt   time.Time `json:"updated_at"`
}

// RolePermission 定义角色权限
type RolePermission struct {
	Role        string   `json:"role"`
	Permissions []string `json:"permissions"` // 权限列表，如 "read_device", "write_device", "manage_user" 等
}

// LoginRequest 用户登录请求
type LoginRequest struct {
	Username string `json:"username"`
	Password string `json:"password"`
}

// LoginResponse 用户登录响应
type LoginResponse struct {
	Token   string `json:"token"`
	UserID  string `json:"user_id"`
	Role    string `json:"role"`
	Expires int64  `json:"expires"`
}

// UserService 提供用户相关的服务接口
type UserService interface {
	// 用户管理
	CreateUser(user *User) error
	GetUserByID(id string) (*User, error)
	GetUserByUsername(username string) (*User, error)
	UpdateUser(user *User) error
	DeleteUser(id string) error
	ListUsers(page, pageSize int) ([]*User, int, error)
	
	// 用户认证
	Authenticate(username, password string) (*User, error)
	GenerateToken(user *User) (string, error)
	ValidateToken(token string) (*User, error)
	
	// 角色权限管理
	GetRolePermission(role string) (*RolePermission, error)
	UpdateRolePermission(rolePerm *RolePermission) error
	CheckPermission(userID, permission string) (bool, error)
	
	// 设备管理
	GetDeviceInfo(deviceID string) (*DeviceInfo, error)
	ListDevices(page, pageSize int) ([]*DeviceInfo, int, error)
	GetDeviceData(deviceID string, limit int64) ([]*DeviceData, error)
	GetDeviceProperty(deviceID, property string) (interface{}, error)
	
	// 设备属性控制配置
	CreateDevicePropertyConfig(config *DevicePropertyConfig) error
	GetDevicePropertyConfig(id string) (*DevicePropertyConfig, error)
	ListDevicePropertyConfigs(deviceID string, page, pageSize int) ([]*DevicePropertyConfig, int, error)
	UpdateDevicePropertyConfig(config *DevicePropertyConfig) error
	DeleteDevicePropertyConfig(id string) error
}